5. Алгоритм навигации робота
Генератор случайных чисел
Мы запустим модель на случайной карте. При этом вы знаете, что генераторы случайных чисел в языках программироавния всегда выдают псевдослучайную последовательность. Выборка этой последовательности имеет нужное нам распределение случайной величины, но обладает ценным свойством воспроизводимости. Последовательность каждый раз "случайна", при этом каждый раз "одинакова" – это псевдослучайность.
using Random
Random.seed!(3);
plot( rand(10,1), size=(500,150), st=:bar ) # st = seriestype
Второе обращение к генератору порождает продолжение выборки, то есть другие числа.
plot( rand(10,1), size=(500,150), st=:bar, c=:green )
Но если мы снова инициализируем генератор псевдослучайных чисел некоторым стартовым числом (seed), то он снова выдаст нам ту же последовательность, что и в первом эксперименте.
Random.seed!(3);
plot( rand(10,1), size=(500,150), st=:bar )
Пространства переменных global, local и soft
Вы уже могли убедиться, что в Julia не так сильно нужно волноваться о пространстве видимости переменных. Циклы for, while и операции try работают в т.н. local(soft) пространстве.
s = 0 # "глобальная" переменная
for i = 1:5
s = s + i # поменяем значение "глобальной" переменной
end
print(s) # сумма чисел 1, 2, 3, 4, 5
reduce( +, 1:5 ) # ну как тут не сказать про reduce...
Команды do и let задают жесткое локальное пространство видимости (и вы увидите их довольно редко).
Команды begin...end вообще не задает отдельного пространства (все глобально).
Внутри функций function создается жесткое локальное пространство.
Короткий ваиант написания if
Вы могли увидеть в коде такую констркцию
изученная_карта[ точка_впереди ] = ( вся_карта[ точка_впереди ] == 1 ? здесь_стена : можно_ехать )
Это краткий вариант написания
if вся_карта[ точка_впереди ] == стена изученная_карта[ точка_впереди ] = здесь_стена;
else изученная_карта[ точка_впереди ] = можно_ехать; end;
Краткость – не всегда сестра таланта, если талант состоит в том, чтобы вас поняли...
К тому же тернарный if (...?...:...) не векторизуется.


